package user

import (
	"beegoProject04/models/user"
	"fmt"
	"github.com/astaxie/beego"
	"github.com/astaxie/beego/orm"
	"math"
)

type UserController struct {
	beego.Controller
}

func (c *UserController) Get() {

	o := orm.NewOrm()
	qs := o.QueryTable("sys_user")
	users := []user.User{}

	// 每页显示数据-4条 (pagePerNum)
	pagePerNum := 4

	// 总数据量
	count, _ := qs.Filter("is_delete", 0).Count()

	// 总页数 (count) =  总数据量 / 每页数据量   注：需要转换成int类型
	countPage := int(math.Ceil(float64(count) / float64(pagePerNum)))

	// 当前页 (currentPage)
	currentPage, err := c.GetInt("page")

	// err 当点击页面时候没有获取到当前页也就是null，所以默认显示第一页
	if err != nil {
		currentPage = 1
	}

	offsetNum := pagePerNum * (currentPage - 1)

	// 修改查询
	qs.Filter("is_delete", 0).Limit(pagePerNum).Offset(offsetNum).All(&users)

	/*
		分页逻辑:
		  当前第几页(currenPage)   offsetNum        limitNum     pagePerNum * ( currenPage - 1 ) = offsetNum
			 1                       0             2             2   *  ( 1 - 1 )  = 0
			 2                       2             2             2   *  ( 2 - 1 )  = 2
			 3                       4             2             2   *  ( 3 - 1 )  = 4

	*/

	// 判断上一页
	prePage := 1
	if currentPage == 1 {
		prePage = currentPage
	} else if currentPage > 1 {
		// 上一页
		prePage = currentPage - 1
	}

	// 下一页
	nextPage := 1
	// 如果当前页小于总页数
	if currentPage < countPage {
		// 下一页 就等于 当前页+1
		nextPage = currentPage + 1
		// 如果当前页面大于等于总页数
	} else if currentPage >= countPage {
		// 下一页 就等于 当前页
		nextPage = currentPage
	}

	fmt.Println("总页数", countPage)
	fmt.Println("上一页: ", prePage)
	fmt.Println("当前页: ", currentPage)
	fmt.Println("下一页: ", nextPage)
	fmt.Println("====================")
	fmt.Println("总数据条数: ", count)

	c.Data["users"] = users
	c.Data["prePage"] = prePage         /* 上一页*/
	c.Data["nextPage"] = nextPage       /* 下一页 */
	c.Data["currentPage"] = currentPage /* 当前页 */
	c.Data["countPage"] = countPage
	c.Data["count"] = count

	c.TplName = "user/user-list.html"
}
